package controladores;

import categoria.CadastroCategoria;
import categoria.Categoria;
import categoria.CategoriaNaoCadastradoException;
import categoria.RepositorioCategoria;
import java.util.List;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorCategoria {
    /**
     * Objeto do tipo RepositorioCategoria
     */
    private RepositorioCategoria objRepositorioCategoria = null;

    public ControladorCategoria(RepositorioCategoria objRepositorioCategoria) {
        
        this.objRepositorioCategoria = objRepositorioCategoria;
        
    }
        
    /**
     * Metodo que ira cadastrar o Categoria
     *
     * @param Categoria objCategoria
     * @return void
     */
    public void cadastrar(Categoria objCategoria) throws  ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Validando os campos
        if(objCategoria.getNome().trim().length() == 0) throw new CamposObrigatoriosException("Nome Categoria");
        if(objCategoria.getSubSetor().getIdSubSetor() == 0)   throw new CamposObrigatoriosException("Sub Setor não informado");
        
        // Salvando no banco
        objCadastroCategoria.cadastrarAtualizar(objCategoria);
    }
    
    /**
     * Metodo que ira cadastrar o Categoria
     *
     * @param Categoria objCategoria
     * @return void
     */
    public void atualizar(Categoria objCategoria) throws  ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Validando os campos
        if(objCategoria.getIdCategoria() == 0) throw new CamposObrigatoriosException("Identificador Categoria");
        if(objCategoria.getNome().trim().length() == 0) throw new CamposObrigatoriosException("Nome Categoria");
        if(objCategoria.getSubSetor().getIdSubSetor() == 0)   throw new CamposObrigatoriosException("Sub Setor não informado");
        
        // Salvando no banco
        objCadastroCategoria.cadastrarAtualizar(objCategoria);
    }
    
    /**
     * Metodo que ira produrar o Categoria
     *
     * @param int idCategoria
     * @return void
     */
    public Categoria procurar(int idCategoria) throws CategoriaNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Validando os campos
        if(idCategoria == 0) throw new CamposObrigatoriosException("Identificador Categoria");
        
        // Procurando na base a caategoria
        return objCadastroCategoria.procurar(idCategoria);
    }

    /**
     * Metodo que ira verificar a existência do Categoria
     *
     * @param int idCategoria
     * @return void
     */
    public boolean existe(int idCategoria) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Validando os campos
        if(idCategoria == 0) throw new CamposObrigatoriosException("Identificador Categoria");
        
        // Procurando na base a caategoria
        return objCadastroCategoria.existe(idCategoria);
    }

    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<Categoria> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Procurando na base a caategoria
        return objCadastroCategoria.listar(strComplemento);
    }

    /**
     * Método que ira remover o Categoria do banco
     *
     * @param idCategoria
     */
    public void remover(int idCategoria) throws CategoriaNaoCadastradoException, ErroAcessoRepositorioException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Procurando na base a caategoria
        objCadastroCategoria.remover(idCategoria);
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<Categoria> listarAtiva() throws Exception, ErroAcessoRepositorioException {
       CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        // Procurando na base a caategoria
        return objCadastroCategoria.listarAtiva();
    } 
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<Categoria> procurarPorDescricao(String descricao) throws Exception, ErroAcessoRepositorioException {
        CadastroCategoria objCadastroCategoria = new CadastroCategoria(this.objRepositorioCategoria);
        
        if(descricao.trim().length() == 0) throw new Exception("Favor preencher a Descrição Categoria");
        
        // Procurando na base a caategoria
        return objCadastroCategoria.procurarPorDescricao(descricao);
    }
}